package com.zx._09_架构.load_balance;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class LB4_weight1 {

    /**
     * 【常规可用】加权方案1
     *
     * 创建一个集合，集合的数量为权重之和，集合中的元素是服务。比如
     * A weight = 5，集合中出现5次
     * B weight = 1，集合中出现1次
     * C weight = 2，集合中出现2次
     * 缺点是，如果权重的值比较大，内存使用浪费
     *
     * @param args
     */
    public static void main(String[] args) {
        Map<String, Integer> weightServer = LB0_common.getWeightServer();

        // AAAAA B CC
        List<String> servers = new ArrayList<>();
        for (Entry<String, Integer> entry : weightServer.entrySet()) {
            for (Integer i = 0; i < entry.getValue(); i++) {
                servers.add(entry.getKey());
            }
        }
        //打乱顺序，使其尽可能均衡些
        Collections.shuffle(servers);

        int idx = 0;
        for (int i = 0; i < 1000; i++) {
            LB0_common.saveResult(servers.get(idx++));
            if (idx == servers.size()) {
                idx = 0;
            }
        }

        LB0_common.printResultAndClear();
    }
}
